#ifndef _IMAGE_H
#define _IMAGE_H

#include "opencv/cv.h"
#include "opencv/highgui.h"

#include "quadtree.h"

class Image
{
public:
	Image(const char* imgPath);
	~Image();
	
	void SetColorResult(bool isColor) { colorResult = isColor; }
	void SetAleaColorResult(bool isAleaColor) { aleaColorResult = isAleaColor; }
	void SetReverseMerge(bool isReverse) { reverseMerge = isReverse; }
	void SetHomogeneousFct(int homo) { homogeneousFct = homo; }
	void SetSplitMinPixel(int minPixel) { splitMinPixel = minPixel; }
	void SetSplitThreshold(int threshold) { splitThreshold = threshold; }
	void SetMergeThreshold(int threshold) { mergeThreshold = threshold; }
	
	const IplImage* GetImg() const { return img; }
	const IplImage* GetSplitImg() const { return splitImg; }
	const IplImage* GetMergeImg() const { return mergeImg; }
	const bool GetColorResult() const { return colorResult; }
	const bool GetAleaColorResult() const { return aleaColorResult; }
	const bool GetReverseMerge() const { return reverseMerge; }
	const int GetHomogeneousFct() const { return homogeneousFct; }
	const int GetSplitMinPixel() const { return splitMinPixel; }
	const int GetSplitThreshold() const { return splitThreshold; }
	const int GetMergeThreshold() const { return mergeThreshold; }
	const std::string GetImgPath() const { return imgPath; }
	
	IplImage* Split();
	IplImage* Merge();
	IplImage* ReverseMerge();

private:
	IplImage* img;			// Image de départ
	IplImage* splitImg;		// Image splitee
	IplImage* mergeImg;		// Image mergee
	Quadtree* quad;			// Quadtree associé à l'image
	bool colorResult;		// true : Résultat en couleur, false : Résultat en noir et blanc
	bool aleaColorResult;		// true : Résultat en couleur aléatoire, false : Résultat en moyenne de couleur
	bool reverseMerge;		// true : fonction de merge : ReverseMerge(), false : fonction de merge : Merge()
	int homogeneousFct;		// Fonction d'homogeneite -> 1:IsHomogeneous, 2:IsHomogeneousDeviation
	int splitMinPixel;		// Taille minimum des noeuds du quadtree
	int splitThreshold;		// Seuil d'homogénéité du split
	int mergeThreshold;		// Seuil d'homogénéité du merge
	std::string imgPath;		// Chemin relatif de l'image de départ
	
};

#endif // _IMAGE_H
